iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

初探後端世界-使用Node.js框架開發網頁系列 第 4

你需要知道的9個元件功能介紹 -3(Modules)

  • 分享至 

  • xImage
  •  

Module

NestJS 有一個特性就是模組化開發,我們前兩節講了Provider和Controller,Module將會將兩者在同一個模塊內建立依賴的橋樑。

import { Module } from '@nestjs/common';
import { SchedulesController } from './schedules.controller';
import { SchedulesService } from './schedules.service';

@Module({
  controllers: [SchedulesController],
  providers: [SchedulesService],
})
export class SchedulesModule {}

因為在同一個Module裡,所以Nest可以在SchedulesController中通過構造函數注入SchedulesService

Shared Module

Module間是可以互相共享使用的,如果今天需要一個CatsService,那就把它放到exports的地方,這樣其他moudle只要imports處導入CatsModule,就能使用CatsService了

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService]
})
export class CatsModule {}

@Module 裝飾器

Module 裝飾器接受一個對象參數,由四種類型的設定,才能識別各種依賴關係:

  • imports:導入其他模塊導出的Providers,以實現共享
  • providers
  • controllers
  • exports:導出其他模塊需要共享的Providers

所以如果要在A Module要使用其他Module中的Provider,那就要在該Provider的Module中將其放進exports中

Global Module

因為Nest將provider封裝在module中,如果不import module進來就無法使用它們的provider,所以要在很多地方都導入相同Module,就會顯的冗余.所以如果只想要一組隨時可用的provider,就加上@Global()即可.

Global Module被import到root module後,其他module就能在直接使用這個provider.

import { Module, Global } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Global()
@Module({
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService],
})
export class CatsModule {}

這裡的CatsService就變成無處不在了,有其他任何module需要的話也不需在import CatsModule了

特別注意:Nest只能定義一個Global Module,且官網文件中認為將所有東西都放在Global Module裡不是一個好的決定.有需要的話,還是imports 需要的module吧


上一篇
你需要知道的9個元件功能介紹 -2(Providers)
下一篇
你需要知道的9個元件功能介紹 -4(Middleware)
系列文
初探後端世界-使用Node.js框架開發網頁12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言